package com.ruoyi.merchant.mapper;

import com.ruoyi.merchant.domain.Merchant;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 商家Mapper接口
 */
public interface MerchantMapper {

    /**
     * 查询开启自动接单的商家列表
     */
    List<Merchant> selectAutoAcceptMerchants();

    /**
     * 更新商家自动接单设置
     */
    int updateAutoAcceptSetting(@Param("merchantId") Long merchantId,
                                @Param("autoAcceptOrder") Integer autoAcceptOrder,
                                @Param("autoAcceptTime") Integer autoAcceptTime);

    int updateContactPhoneByUserId(@Param("userId") Long userId, @Param("contactPhone") String contactPhone);

    /**
     * 查询待审核商家列表
     */
    List<Merchant> selectAuditList(Merchant merchant);

    /**
     * 根据审核状态统计数量
     */
    int countByAuditStatus(@Param("auditStatus") String auditStatus);


    /**
     * 插入商家信息
     * @param merchant 商家信息
     * @return 影响行数
     */
    int insertMerchant(Merchant merchant);

    /**
     * 根据ID查询商家
     * @param merchantId 商家ID
     * @return 商家信息
     */
    Merchant selectMerchantById(@Param("merchantId") Long merchantId);

    /**
     * 根据用户ID查询商家
     * @param userId 用户ID
     * @return 商家信息
     */
    Merchant selectMerchantByUserId(@Param("userId") Long userId);

    /**
     * 根据手机号查询商家
     * @param phone 手机号
     * @return 商家信息
     */
    Merchant selectMerchantByPhone(@Param("phone") String phone);

    /**
     * 根据营业执照号查询商家
     * @param businessLicense 营业执照号
     * @return 商家信息
     */
    Merchant selectMerchantByBusinessLicense(@Param("businessLicense") String businessLicense);

    /**
     * 根据食品许可证号查询商家
     * @param foodLicense 食品许可证号
     * @return 商家信息
     */
    Merchant selectMerchantByFoodLicense(@Param("foodLicense") String foodLicense);

    /**
     * 更新商家信息
     * @param merchant 商家信息
     * @return 影响行数
     */
    int updateMerchant(Merchant merchant);

    /**
     * 删除商家（软删除）
     * @param merchantId 商家ID
     * @return 影响行数
     */
    int deleteMerchantById(@Param("merchantId") Long merchantId);

    /**
     * 查询商家列表
     * @param merchant 查询条件
     * @return 商家列表
     */
    List<Merchant> selectMerchantList(Merchant merchant);

    /**
     * 统计商家数量
     * @param merchant 查询条件
     * @return 商家数量
     */
    int countMerchant(Merchant merchant);

    void updateSelective(Merchant toUpdate);

    /**
     * 更新门店信息
     *
     * @param merchant 商家信息
     * @return 影响行数
     */
    int updateMerchantInfo(Merchant merchant);

    /**
     * 检查营业执照是否重复
     *
     * @param businessLicense 营业执照号
     * @param merchantId 当前商家ID（排除自己）
     * @return 重复数量
     */
    int checkBusinessLicenseDuplicate(@Param("businessLicense") String businessLicense,
                                      @Param("merchantId") Long merchantId);

    /**
     * 检查食品经营许可证是否重复
     *
     * @param foodLicense 食品经营许可证号
     * @param merchantId 当前商家ID（排除自己）
     * @return 重复数量
     */
    int checkFoodLicenseDuplicate(@Param("foodLicense") String foodLicense,
                                  @Param("merchantId") Long merchantId);

    /**
     * 更新商家密码
     *
     * @param merchantId 商家ID
     * @param newPassword 新密码（已加密）
     * @return 影响行数
     */
    int updateMerchantPassword(@Param("merchantId") Long merchantId,
                               @Param("newPassword") String newPassword);

    /**
     * 软删除商家账号
     *
     * @param merchantId 商家ID
     * @return 影响行数
     */
    int softDeleteMerchant(@Param("merchantId") Long merchantId);

    /**
     * 更新商家综合评分
     *
     * @param merchantId 商家ID
     * @param rating     综合评分
     * @return 结果
     */
    int updateMerchantRating(@Param("merchantId") Long merchantId, @Param("rating") BigDecimal rating);

    /**
     * 查询所有有效商家ID列表（用于批量更新评分）
     *
     * @return 商家ID列表
     */
    List<Long> selectAllActiveMerchantIds();
}
